using System;

namespace SharpMud.Scripting.Processing
{
	/// <summary>
	/// Outlines the functionality for processing (and compiling) scripts
	/// </summary>
	public interface IScriptProcessor
	{
		/// <summary>
		/// The scripting language that this script processor is for
		/// </summary>
		Metadata.IScriptLanguageDefinition ScriptLanguage {get;}

		/// <summary>
		/// Process (and compile) the given script
		/// </summary>
		/// <param name="source">The source object of the script to process (and compile)</param>
		/// <returns></returns>
		IScriptProcessResult	ProcessSource(ScriptSourceWrapper source);
		/// <summary>
		/// Process (and compile) the given scripts
		/// </summary>
		/// <param name="sources">The source objects of the scripts to process (and compile)</param>
		/// <returns></returns>
		IScriptProcessResult[]	ProcessSourceBatch(ScriptSourceWrapper[] sources);
		
		/// <summary>
		/// Process (and compile) the given script
		/// </summary>
		/// <param name="source">The source code of the script to process (and compile)</param>
		/// <returns></returns>
		IScriptProcessResult	ProcessSource(string source);
		/// <summary>
		/// Process (and compile) the given script sources
		/// </summary>
		/// <param name="sources">The source code of the script to process (and compile)</param>
		/// <returns></returns>
		IScriptProcessResult[]	ProcessSourceBatch(string[] sources);
		
		/// <summary>
		/// Process (and compile) the given file as source code
		/// </summary>
		/// <param name="file">The source code file to be processed (and compiled)</param>
		/// <returns></returns>
		IScriptProcessResult	ProcessFile(string file);
		/// <summary>
		/// Process (and compile) the given files as source code
		/// </summary>
		/// <param name="files">The source coe files to be processed (and compiled)</param>
		/// <returns></returns>
		IScriptProcessResult[]	ProcessFileBatch(string[] files);
	}
}
